package app.sevenc.lib_annotation.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 用注解 @DebugUrl 配置 debugUrl
 *
 * {@link Retention}：注解的生命周期 决定了注解在我们代码中的存在周期
 * {@link RetentionPolicy.SOURCE}源码期：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃，是3种生命周期中最短的注解；
 * {@link RetentionPolicy.CLASS}编译期：作用域class字节码上，生命周期只有在编译器间有效
 * {@link RetentionPolicy.RUNTIME}运行期：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在
 *
 * {@link Target}：可以用来修饰哪些程序元素，有以下几种，未标注则表示可修饰所有
 * {@link ElementType.TYPE}：定义在类上
 * {@link ElementType.METHOD}：方法上
 * {@link ElementType.CONSTRUCTOR}：构造方法上
 * {@link ElementType.FIELD}：成员变量上
 * {@link ElementType.PARAMETER}：方法参数上
 *
 * {@link Inherited}：是否可以被继承，默认为false
 *
 * {@link Documented}：是否会保存到 Javadoc 文档中
 *
 * @author Seven-C
 * @date 2021/8/16
 */
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.FIELD)
public @interface DomainUrl {
    // 标记param的名称或服务名称
    String name();
    // 如果需要，应用程序将崩溃时，值为空
    // Primitive type wont be check!
    boolean required() default false;

    // 字段描述
    String desc() default "用注解 @DomainUrl 配置 domainUrl ";
}
